﻿
using BO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
 
 namespace WebUI.Models
 {
     /// <summary>
 /// 自定义AuthorizeAttribute
 /// </summary>
     public class DBUserAuthorizeAttribute : AuthorizeAttribute
     {
         public override void OnAuthorization( AuthorizationContext filterContext ) {
             if (filterContext == null) {
                 throw new ArgumentNullException( "filterContext" );
             }
             string action = filterContext.RouteData.Values["action"].ToString();
           
             string controller = filterContext.RouteData.Values["controller"].ToString();
            
             SysUser user = filterContext.HttpContext.Session["CurrentUser"] as SysUser;
           
             var isAllowed = user!=null;
             if (!isAllowed) {
                 filterContext.HttpContext.Response.Redirect("/Logon");
             }
 
         }
 
 //        /// <summary>
 ///// 判断是否允许访问
 ///// </summary>
 ///// <param name="user">用户</param>
 ///// <param name="controller">控制器</param>
 ///// <param name="action">action</param>
 ///// <returns>是否允许访问</returns>
 //        public bool IsAllowed( User user, string controller, string action ) {
 
 //            // 找controllerAction
 //            var controllerAction = Database.ControllerActions.FirstOrDefault( ca => ca.IsController == false && ca.Name == action && ca.ControllerName == controller );
 
 //            //action无记录，找controller
 //            if (controllerAction == null) {
 //                controllerAction = Database.ControllerActions.FirstOrDefault( ca => ca.IsController && ca.Name == controller );
 //            }
 
 //            // 无规则
 //            if (controllerAction == null) {
 //                return true;
 //            }
 
 
 //            // 允许没有角色的：也就是说允许所有人，包括没有登录的用户 
 //            if (controllerAction.IsAllowedNoneRoles) {
 //                return true;
 //            }
 //            if (user==null) {
 //                return false;
 //            }
 //            // 允许所有角色：只要有角色，就可以访问 
 //            if (controllerAction.IsAllowedAllRoles) {
 //                int count = Database.UserRoles.Count( ur => ur.UserID == user.ID );
 //                if (count > 0) {
 //                    return true;
 //                }
 //                else {
 //                    return false;
 //                }
 //            }
 
 //            // 选出action对应的角色 
 //            var actionRoles = Database.ControllerActionRoles.ToList().FindAll( ca => ca.ControllerActionID == controllerAction.ID );
 
 //            if (actionRoles.Count == 0) {
 //                // 角色数量为0，也就是说没有定义访问规则，默认允许访问 
 //                return true;
 //            }
 //            var userHavedRolesids = Database.UserRoles.ToList().FindAll( ur => ur.UserID == user.ID ).Select( ca => ca.RoleID );
 //            // 查找禁止的角色 
 //            var notAllowedRoles = actionRoles.FindAll( r => !r.IsAllowed ).Select( ca => ca.RoleID );
 //            if (notAllowedRoles.Count() > 0) {
 //                foreach (int roleId in notAllowedRoles) {
 //                    // 用户的角色在禁止访问列表中，不允许访问 
 //                    if (userHavedRolesids.Contains( roleId )) {
 //                        return false;
 //                    }
 //                }
 //            }
 //            // 查找允许访问的角色列表 
 //            var allowRoles = actionRoles.FindAll( r => r.IsAllowed ).Select( ca => ca.RoleID ).ToList();
 //            if (allowRoles.Count > 0) {
 //                foreach (int roleId in allowRoles) {
 //                    // 用户的角色在访问的角色列表 
 //                    if (userHavedRolesids.Contains( roleId )) {
 //                        return true;
 //                    }
 //                }
 //            }
 //            // 默认禁止访问
 //            return false;
 //        }
 
     }
 }